package com.cmict.data.infra.controller.admin.message.vo;

import com.cmict.data.infra.enums.message.NotifyChannelEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 公告信息
 *
 * @author hccake 2020-12-15 17:01:15
 */
@Data
@Schema(title = "公告信息")
public class AnnouncementDTO {

	private static final long serialVersionUID = 1L;

	/**
	 * ID
	 */
	@Schema(title = "ID")
	private Long id;

	/**
	 * 标题
	 */
	@NotBlank(message = "标题不能为空")
	@Schema(title = "标题")
	@Length(max = 255)
	private String title;

	/**
	 * 内容
	 */
	@NotNull(message = "内容不能为空")
	@Schema(title = "内容")
	private String content;

	/**
	 * 内容显示字段
	 */
	@Schema(title = "内容显示字段")
	private String contentDisplay;

	@Schema(title = "短信内容")
	private String smsContent;

	/**
	 * 附属url
	 */
	@Schema(title = "附属url")
	private String url;

	/**
	 * 附属url
	 */
	@Schema(title = "系统模板id")
	private Long templateId;

	/**
	 * 消息类型:公告，新闻，会议，通知
	 */
	@NotNull(message = "消息类型不能为空")
	@Schema(title = "消息类型")
	private Integer type;

	/**
	 * 接收人筛选方式，1：全部 2：用户角色 3：组织机构 4：用户类型 5：自定义用户
	 */
	@NotNull(message = "接收人范围不能为空")
	@Schema(title = "接收人范围")
	private Integer recipientFilterType;

	/**
	 * 对应接收人筛选方式的条件信息，多个用逗号分割。如角色标识，组织ID，用户类型，用户ID等
	 */
	@Schema(title = "对应接收人筛选方式的条件信息。如角色标识，组织ID，用户类型，用户ID等")
	private List<Long> recipientFilterCondition;

	/**
	 * 接收方式，值与通知渠道一一对应
	 * @see NotifyChannelEnum
	 */
	@Schema(title = "接收方式")
	private List<Integer> receiveMode;

	/**
	 * 消息触发类型不能为空:1 立即发送；2 定时发送
	 */
	@NotNull(message = "消息触发类型不能为空:1 立即发送；2 定时发送")
	@Schema(title = "消息触发类型")
	private Integer sendAction;

	/**
	 * 消息发送时间
	 */
	@Schema(title = "消息发送时间")
	private LocalDateTime sendTime;

	/**
	 * 是否开启超时提醒
	 */
	private Boolean isRemind  ;
	/**
	 * 超时时间
	 */
	private BigDecimal time;
	/**
	 * 消息间隔
	 */
	private BigDecimal message;
	/**
	 * 推送次数
	 */
	private Integer frequency;

	/**
	 * 已完成 推送次数
	 */
	private Integer completerFrequency;
	/**
	 * 超时唯一标识
	 */
	public String remindId;

	/**
	 * 附件
	 */
	@Schema(title = "附件")
	private String allFileList;

}
